#include "kasm.h"
#include "defs.h"
#include "keyboard.h"
#include "kc.h"
#include "video.h"
#include "interrupts.h"


DESCR_INT idt[0x81];			/* IDT de 81h entradas*/
IDTR idtr;						/* IDTR */


/**********************************************
kmain() 
Punto de entrada de cdigo C.
*************************************************/

kmain() 
{

        int i,num;

/* Borra la pantalla. ( En realidad coloca ceros para que puedan ser
 * visualizados, se puede cambiar en libc.c ) */    

	k_clear_screen();


/* CARGA DE IDT CON LA RUTINA DE ATENCION DE IRQ0    */

	/* Timer Tick */
    setup_IDT_entry (&idt[0x08], 0x08, (dword)&int_08_hand, ACS_INT, 0);
	/* Teclado */
	setup_IDT_entry (&idt[0x09], 0x08, (dword)&int_09_hand, ACS_INT, 0); 
	/* Puerto Serie COM1 */
	setup_IDT_entry (&idt[0x0C], 0x08, (dword)&int_0C_hand, ACS_INT, 0);
	/* Puerto Serie COM2 */
	setup_IDT_entry (&idt[0x0B], 0x08, (dword)&int_0C_hand, ACS_INT, 0);
	
	/* INT 80h (write) */
	setup_IDT_entry (&idt[0x80], 0x08, (dword)&int_80_hand, ACS_INT, 0);
	
	
/* Carga de IDTR    */

	idtr.base = 0;  
	idtr.base +=(dword) &idt;
	idtr.limit = sizeof(idt)-1;
	
	_lidt (&idtr);	

	_Cli();
	
/* Habilito interrupcion de timer tick*/

    mascaraPIC1(0xFE & 0xFD); /* Habilito IRQ0, IRQ1 */

    mascaraPIC2(0xFF);
        
	_Sti();

	Shell();
}
